{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "electric-edgar", "metadata": {}, "outputs": [], "source": [ "# This tutorial discusses how to define functions within Python code.\n", "# Once defined, the functions can be evaluated, differentiated, integrated,\n", "# plotted, ... \n", "import numpy as np\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 2, "id": "numeric-narrative", "metadata": {}, "outputs": [], "source": [ "# The notation used to define a function is the following:\n", "def f(x):\n", " return np.sin(x)" ] }, { "cell_type": "code", "execution_count": 3, "id": "elegant-search", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.0\n", "0.7071067811865476\n", "1.0\n" ] } ], "source": [ "# You can all your function anything, it doesn't have to be f. Also, the \n", "# variables are defined within the function and do not need to be declared\n", "# outside of the function.\n", " \n", "# Once defined, it's easy to evaluate the function at any value of x.\n", "print(f(0))\n", "print(f(np.pi/4))\n", "print(f(np.pi/2))" ] }, { "cell_type": "code", "execution_count": 4, "id": "virgin-proportion", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 0. , 0.09983342, 0.19866933, 0.29552021, 0.38941834,\n", " 0.47942554, 0.56464247, 0.64421769, 0.71735609, 0.78332691,\n", " 0.84147098, 0.89120736, 0.93203909, 0.96355819, 0.98544973,\n", " 0.99749499, 0.9995736 , 0.99166481, 0.97384763, 0.94630009,\n", " 0.90929743, 0.86320937, 0.8084964 , 0.74570521, 0.67546318,\n", " 0.59847214, 0.51550137, 0.42737988, 0.33498815, 0.23924933,\n", " 0.14112001, 0.04158066, -0.05837414, -0.15774569, -0.2555411 ,\n", " -0.35078323, -0.44252044, -0.52983614, -0.61185789, -0.68776616,\n", " -0.7568025 , -0.81827711, -0.87157577, -0.91616594, -0.95160207,\n", " -0.97753012, -0.993691 , -0.99992326, -0.99616461, -0.98245261,\n", " -0.95892427, -0.92581468, -0.88345466, -0.83226744, -0.77276449,\n", " -0.70554033, -0.63126664, -0.55068554, -0.46460218, -0.37387666,\n", " -0.2794155 , -0.1821625 , -0.0830894 ])" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# We can also input a vector of x-values and evaluate the function at each\n", "# value of x contained in the array.\n", "xx = np.arange(0,2*np.pi,0.1)\n", "y = f(xx)\n", "y" ] }, { "cell_type": "code", "execution_count": 5, "id": "disturbed-support", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# These data can then easily be plotted.\n", "plt.plot(xx, f(xx), 'bo')\n", "plt.xlabel('x')\n", "plt.ylabel('f(x) = sin x');" ] }, { "cell_type": "code", "execution_count": 6, "id": "facial-narrow", "metadata": {}, "outputs": [], "source": [ "# If you wanted to do symbolic math using a function, you could use 'sym.sin()'\n", "# instead of 'np.sin()'. This requires the module 'sympy'.\n", "import sympy as sym\n", "def f1(x):\n", " return sym.sin(x)" ] }, { "cell_type": "code", "execution_count": 7, "id": "alpine-cross", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle \\cos{\\left(x \\right)}$" ], "text/plain": [ "cos(x)" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Now we can take the x-derivative. First, we now do need to specify 'x' as\n", "# a symbol.\n", "x = sym.Symbol('x') \n", "z = sym.diff(f1(x), x)\n", "z" ] }, { "cell_type": "code", "execution_count": 8, "id": "random-scotland", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle - \\cos{\\left(x \\right)}$" ], "text/plain": [ "-cos(x)" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Of course, we can integrate too. \n", "z = sym.integrate(f1(x), x)\n", "z" ] }, { "cell_type": "code", "execution_count": 9, "id": "cordless-helena", "metadata": {}, "outputs": [], "source": [ "# Here is another function:\n", "def g(x):\n", " return x**2" ] }, { "cell_type": "code", "execution_count": 10, "id": "opponent-diabetes", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.91418507525795" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# We can nest the two functions:\n", "f(g(1.41))\n", "# which is equivalent to sin(1.41^2). " ] }, { "cell_type": "code", "execution_count": 11, "id": "interim-identifier", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle 2 \\sin{\\left(x \\right)} \\cos{\\left(x \\right)}$" ], "text/plain": [ "2*sin(x)*cos(x)" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# We should be able to get Python to do chain rule for us:\n", "z = sym.diff(g(f1(x)), x)\n", "z" ] }, { "cell_type": "code", "execution_count": 12, "id": "juvenile-sailing", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle \\frac{x}{2} - \\frac{\\sin{\\left(x \\right)} \\cos{\\left(x \\right)}}{2}$" ], "text/plain": [ "x/2 - sin(x)*cos(x)/2" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# The integral:\n", "z = sym.integrate(g(f1(x)), x)\n", "z" ] }, { "cell_type": "code", "execution_count": 13, "id": "intensive-knitting", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle \\sin^{2}{\\left(x \\right)}$" ], "text/plain": [ "sin(x)**2" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# We should be able to go back to sin^2x:\n", "sym.simplify(sym.diff(z, x))" ] }, { "cell_type": "code", "execution_count": 14, "id": "hungry-toyota", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "5" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Everything above was for a function of a single variable. You can, of\n", "# course, have a function of any number of variables. Here's a simple\n", "# function of two variables:\n", "def k(x, y):\n", " return x**2 + y**2\n", "k(1, 2)" ] }, { "cell_type": "code", "execution_count": 15, "id": "enormous-globe", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle 2 x + 2 \\sin{\\left(x \\right)} \\cos{\\left(x \\right)}$" ], "text/plain": [ "2*x + 2*sin(x)*cos(x)" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Some more symbolic derivatives\n", "z = sym.diff(k(x, f1(x)), x)\n", "z" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.8" } }, "nbformat": 4, "nbformat_minor": 5 }